aboutsummaryrefslogtreecommitdiffstats
path: root/apps/web/app/api/v1/highlights/[highlightId]
diff options
context:
space:
mode:
authorMohamed Bassem <me@mbassem.com>2024-12-27 19:21:43 +0000
committerMohamed Bassem <me@mbassem.com>2024-12-27 19:34:04 +0000
commit3f56389f55ef116f8cea17c15c684798fb942290 (patch)
tree1a398accbcfc75674c5cc4970bc85fd27c637911 /apps/web/app/api/v1/highlights/[highlightId]
parent86d74e3f32dd5bccc8df195b55391e206df9a1c4 (diff)
downloadkarakeep-3f56389f55ef116f8cea17c15c684798fb942290.tar.zst
feat: Add REST APIs for manipulating highlights. Fixes #620
Diffstat (limited to 'apps/web/app/api/v1/highlights/[highlightId]')
-rw-r--r--apps/web/app/api/v1/highlights/[highlightId]/route.ts50
1 files changed, 50 insertions, 0 deletions
diff --git a/apps/web/app/api/v1/highlights/[highlightId]/route.ts b/apps/web/app/api/v1/highlights/[highlightId]/route.ts
new file mode 100644
index 00000000..aa92e7ce
--- /dev/null
+++ b/apps/web/app/api/v1/highlights/[highlightId]/route.ts
@@ -0,0 +1,50 @@
+import { NextRequest } from "next/server";
+import { buildHandler } from "@/app/api/v1/utils/handler";
+
+import { zUpdateHighlightSchema } from "@hoarder/shared/types/highlights";
+
+export const dynamic = "force-dynamic";
+
+export const GET = (
+ req: NextRequest,
+ { params }: { params: { highlightId: string } },
+) =>
+ buildHandler({
+ req,
+ handler: async ({ api }) => {
+ const highlight = await api.highlights.get({
+ highlightId: params.highlightId,
+ });
+ return { status: 200, resp: highlight };
+ },
+ });
+
+export const PATCH = (
+ req: NextRequest,
+ { params }: { params: { highlightId: string } },
+) =>
+ buildHandler({
+ req,
+ bodySchema: zUpdateHighlightSchema.omit({ highlightId: true }),
+ handler: async ({ api, body }) => {
+ const highlight = await api.highlights.update({
+ highlightId: params.highlightId,
+ ...body!,
+ });
+ return { status: 200, resp: highlight };
+ },
+ });
+
+export const DELETE = (
+ req: NextRequest,
+ { params }: { params: { highlightId: string } },
+) =>
+ buildHandler({
+ req,
+ handler: async ({ api }) => {
+ const highlight = await api.highlights.delete({
+ highlightId: params.highlightId,
+ });
+ return { status: 200, resp: highlight };
+ },
+ });